package br.com.JZSolution.domineduplex.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;

import br.com.JZSolution.domineduplex.DomineDuplex;
import br.com.JZSolution.domineduplex.gui.util.ComunicadorDeMensagens;
import br.com.JZSolution.domineduplexserver.modelo.Comunicador;

public class ChecadorDePorta {
	
	/**
	 * Testa se a porta esta aberta
	 * @param ip
	 * @param porta
	 * @return
	 */
	public static boolean checar(final String porta){
		try{
			Thread t = new Thread(){
				public void run() {
					ServerSocket servidor = null;
					try{
						servidor = new ServerSocket(Integer.parseInt(porta));
						System.out.println(((Socket)servidor.accept()).getRemoteSocketAddress());
						servidor.close();
						interrupt();
					}catch (BindException e) {
						e.printStackTrace();
						ComunicadorDeMensagens.erro("A porta de recepção "+ DomineDuplex.getInstance().getPortaDeRecepcao() +" já está em uso por outro programa, tente outra porta!"
								, "Erro ao conectar");
					}catch (Exception e2) {
						e2.printStackTrace();
						ComunicadorDeMensagens.erro("Erro ao conectar");
					}finally{
						if(servidor != null && !servidor.isClosed()){
							try {
								servidor.close();
							} catch (IOException e) {
								e.printStackTrace();
							}
						}	
					}
				}
			};
			t.start();
			
			URL url = new URL("http://www.yougetsignal.com/tools/open-ports/php/check-port.php");
			
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);
			//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			
			Comunicador comunicador = new Comunicador();
			comunicador.setComando(Comunicador.ADCIONAR_CONTATO);
			
		
			OutputStreamWriter data = new OutputStreamWriter(conn.getOutputStream());
			data.write("portNumber="+porta+"");
			data.flush();
			data.close();
			
			//is closed
			//is open
			
			//Busca a resposta da pagina
			BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
			String line;
			StringBuffer resposta = new StringBuffer("");
			while ((line = rd.readLine()) != null) {  
				resposta.append(line + "\n");
			}  
			rd.close();  
			
			if(resposta.indexOf("is open") != -1)
				return true;
			else
				return false;
			
		}catch (Exception e) {
			e.printStackTrace();
		}
		return false; 
	}
	
}
